package com.glr.subject.service;

import com.glr.common.utils.JsonUtils;
import com.glr.common.utils.RedisOperator;
import com.glr.subject.dao.TagDao;
import com.glr.subject.entity.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 学科标签业务层
 *
 * @author GLoRy
 * @date 2021/6/8 22:14
 */
@Service
public class TagService {

    @Autowired
    private TagDao tagDao;

    @Autowired
    private RedisOperator redisOperator;

    /**
     * 增加学科标签
     *
     * @param tag 学科标签实体
     */
    @Transactional(rollbackFor = Exception.class)
    public void save(Tag tag) {
        tagDao.save(tag);
    }

    /**
     * 修改学科标签
     *
     * @param tag 学科标签实体
     */
    @Transactional(rollbackFor = Exception.class)
    public void update(Tag tag) {
        tagDao.save(tag);
    }

    /**
     * 删除学科标签
     *
     * @param id 学科标签id
     */
    @Transactional(rollbackFor = Exception.class)
    public void delete(Integer id) {
        tagDao.deleteById(id);
    }

    /**
     * 根据id查询学科标签
     *
     * @param id 学科标签id
     * @return 学科标签信息
     */
    public Tag findById(Integer id) {
        return tagDao.findById(id).orElse(null);
    }

    /**
     * 查询学科标签
     *
     * @return 学科标签信息
     */
    public List<Tag> findAll() {
        List<Tag> tagList = tagDao.findAll();
        String value = JsonUtils.objectToJson(tagList);
        redisOperator.set("tagList", value);
        return tagList;
    }

    /**
     * 分页查询学科标签
     *
     * @param page     当前页
     * @param pageSize 每页行数
     * @return 学科标签分页信息
     */
    public Page<Tag> findByPage(Integer page, Integer pageSize) {
        PageRequest pageRequest = PageRequest.of(page - 1, pageSize);
        Page<Tag> tagPage = tagDao.findAll(pageRequest);
        String value = JsonUtils.objectToJson(tagPage);
        redisOperator.set("tagPage", value);
        return tagPage;
    }
}
